#include "Pen.h"

Pen::Pen(  ){
        position =  new PV(  );
        direction = 0;
};

Pen::Pen( PV* p , float dir ){
        setPos( p );
        setDir( dir );
};

Pen::Pen( float posX , float posY , float dir ){
        PV * p = new PV( posX , posY );
        setPos(p);
        setDir(dir);
};

PV * Pen::getPos(  ){
        return position;
};

float  Pen::getDir(  ){
        return direction;
};

void Pen::setPos( PV * pos ){
        position = pos;
};

void Pen::setPos( PV  pos ){
        *position = pos;
};

void Pen::setPos( float x , float y ){
        position->setx( x );
        position->sety( y );
};

void Pen::setDir( float dir ){
        direction = dir;
};

PV* Pen::lineTo ( PV * p ){
        setPos(p);
        return p;
};

PV* Pen::lineTo( float x , float y ) {
        PV* P2=new PV( x , y );
        return P2;
};


void Pen::moveTo ( PV* p ){
        setPos( p );
};

void Pen::moveTo ( float x , float y ){
        position->setx( x );
        position->sety( y );
};

void Pen::turnTo( float dir ){
        setDir( dir );
} ;

void Pen::turn (float ang){
        direction += ang;
};

PV* Pen::forward( float dist ){
        float auxX,auxY;

        auxX = getPos(  )->getx(  ) + cos( getDir(  ) )*dist;
        auxY = getPos(  )->gety(  ) + sin( getDir(  ) )*dist;

        PV * auxP = new PV( auxX , auxY );
        return lineTo( auxP );
};

void Pen::forwardAux( float dist ){
        float auxX,auxY;

        auxX = getPos(  )->getx(  ) + cos( getDir())*dist;
        auxY = getPos(  )->gety(  ) + sin( getDir() )*dist;

        setPos(auxX,auxY);
};


